ListNode* rotateRight(ListNode* head, int k) {
        // 一定不要忘了处理特殊数据
        if (k == 0 || head == nullptr || head->next == nullptr)
            return head;

        // 计算链表长度
        int n = 1;
        ListNode* iter = head;
        while (iter->next) 
        {
            iter = iter->next;
            n++;
        }

        int add = n - k % n; // add 表示从链表头开始，需要移动到新尾节点的位置
        if (add == n) // 如果 add 等于 n，说明旋转次数 k 是链表长度的整数倍，旋转后链表不变，直接返回原链表
            return head;
        
        iter->next = head; // 形成环形链表
        while (add--) // iter 指向新尾节点的前一个节点
            iter = iter->next;
        
        ListNode* ret = iter->next; // ret指向旋转后的新头节点
        iter->next = nullptr;
        return ret;
    }